 import {writeFile  } from 'xlsx'; 
import * as XLSX from "xlsx";

/*
			getDataToXlsxFile：根据数组导出文件
			tableRef-表格的ref值
			ignoreList-忽略导出列，例如['操作','产品操作']，表示操作、产品操作这一列不导出
			tableData-表格数据
			tableName-导出的文件名
			colsList-表格列宽，没有就按默认列宽导出，例如：[{ wch: 5 },{ wch: 5 },...]
			mergesList-合并规则,例如[[e:{r:4,c:0},s:{r:3,c:0}],...]，表示第1列的第4个格子向第1列的第3个格子合并
			sortList-排序规则,有些表格是右侧固定，导出时又需要排在前面。填写规则:[{"location:"定位字段1",field:"排序字段1"，fieldEn:"排序字段属性名1"}...]
			*/
		   
export function  exportDataToXlsxFile(tableRef, ignoreList, tableData, tableName, colsList = [], mergesList = [], sortList = [],xlslName) {
			     
				
				//console.log('表格',tableData.length)				
				let enHeader = [];//英文表头
			    let zhHeader = [];//中文表头
			    tableRef.columns.map((column) => {
			        if (column.label && !ignoreList.includes(column.label)) {
			            enHeader.push(column.property)
			            zhHeader.push(column.label)
			        }
			    })
			    if (sortList.length > 0) {
			        sortList.map((data) => {
			            for (let index2 = 0; index2 < zhHeader.length; index2++) {
			                // console.log("index2", index2)
			                if (zhHeader[index2] === data.location) {
			                    // console.log("test", index2, zhHeader[index2], data.location)
			                    zhHeader.splice(index2, 0, data.field)
			                    enHeader.splice(index2, 0, data.fieldEn)
			                    index2++
			                }
			                else if (zhHeader[index2] === data.field) {
			                    zhHeader.splice(index2, 1)
			                    enHeader.splice(index2, 1)
			                }
			            }
			        })
			    }
			    if (colsList.length === 0) {
			        zhHeader.map((label) => {
			            colsList.push({ wch: label.length * 2 })
			        })
			    }
			    //定义xlsx的表头，是表格的第一行即中文表头
			    let xlsxList = [zhHeader];
			    //循环表格数据，将每一行表格数据添加到xlsxList中
			    tableData.map((item, index0) => {
			        xlsxList[index0 + 1] = [];
			        //按照每行数据都按照定义的英文表头排序
			        for (let index1 = 0; index1 < enHeader.length; index1++) {
			            xlsxList[index0 + 1].push(item[enHeader[index1]]);
			        }
			    });
			    //清空被合并项的数值，避免用户操作下载的excel时，修改合并项后，被合并项还保留原值
			    if (mergesList.length > 0) {
			        mergesList.map((mergesItem) => {
			            // console.log('mergesItem', mergesItem)
			            for (let ri = mergesItem.s.r; ri < mergesItem.e.r + 1; ri++) {
			                // console.log('ri', ri)
			                for (let ci = ri === mergesItem.s.r ? mergesItem.s.c + 1 : mergesItem.s.c; ci < mergesItem.e.c + 1; ci++) {
			                    // console.log('ci', ci)
			                    xlsxList[ri][ci] = undefined
			                }
			            }
			        })
			    }
			    var wb = XLSX.utils.book_new(); //创建一个空的工作簿
			    wb.SheetNames.push(tableName); //加入第一个工作表
			    wb.Sheets[tableName] = XLSX.utils.aoa_to_sheet(xlsxList); //给第一个工作表赋值
			    wb.Sheets[tableName]["!cols"] = colsList
			    wb.Sheets[tableName]["!merges"] = mergesList;
			    writeFile(wb, tableName + "-" + `${xlslName}.xlsx` );
				
				
			}
			